<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // <!-- 冒泡排序 -->
      //   const arr = [7, 8, 4, 10, 22, 5, 67, 5, 4, 56, 3];
      //   const arr2 = [7, 8, 4, 10, 22, 5, 67, 5, 4, 56, 3];

      //   function op(arr) {
      //     const len = arr.length;
      //     let swapped;
      //     for (let i = 0; i < len - 1; i++) {
      //       swapped = false;
      //       for (let j = 0; j < len - 1 - i; j++) {
      //         if (arr[j] > arr[j + 1]) {
      //           [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
      //           swapped = true;
      //         }
      //       }
      //       if (!swapped) break;
      //     }
      //     return arr;
      //   }

      //   function unique(arr) {
      //     const map = new Map();
      //     return arr.filter((item) => {
      //       return !map.has(item) && map.set(item, true);
      //     });
      //   }
      //   console.log(op(arr));
      //   console.log(unique(arr2));

      //   function func(n) {
      //     if (n <= 1) return n;
      //     let a = 0;
      //     let b = 1;
      //     for (let i = 2; i <= n; i++) {
      //       const c = a + b;
      //       a = b;
      //       b = c;
      //     }
      //     console.log('b: ', b);
      //     return b;
      //   }
      //   console.log(func(10));
      //   async function async1() {
      //     console.log("async1 start");
      //     await async2();
      //     console.log("async1 end");
      //   }
      //   async function async2() {
      //     console.log("async2");
      //   }

      //   console.log("script start");

      //   setTimeout(function () {
      //     console.log("setTimeout");
      //   }, 0);

      //   async1();

      //   new Promise(function (resolve) {
      //     console.log("promise1");
      //     resolve();
      //   }).then(function () {
      //     console.log("promise2");
      //   });
      //   console.log("script end");

      //     async function async1() {
      //     console.log('async1 start');
      //     await async2();
      //     console.log('async1 end');
      // }
      // async function async2() {
      //     //async2做出如下更改：
      //     new Promise(function(resolve) {
      //     console.log('promise1');
      //     resolve();
      // }).then(function() {
      //     console.log('promise2');
      //     });
      // }
      // console.log('script start');

      // setTimeout(function() {
      //     console.log('setTimeout');
      // }, 0)
      // async1();

      // new Promise(function(resolve) {
      //     console.log('promise3');
      //     resolve();
      // }).then(function() {
      //     console.log('promise4');
      // });

      // console.log('script end');
      // async function async1() {
      //     console.log('async1 start');
      //     await async2();
      //     //更改如下：
      //     setTimeout(function() {
      //         console.log('setTimeout1')
      //     },0)
      // }
      // async function async2() {
      //     //更改如下：
      //     setTimeout(function() {
      //         console.log('setTimeout2')
      //     },0)
      // }
      // console.log('script start');

      // setTimeout(function() {
      //     console.log('setTimeout3');
      // }, 0)
      // async1();

      // new Promise(function(resolve) {
      //     console.log('promise1');
      //     resolve();
      // }).then(function() {
      //     console.log('promise2');
      // });
      // console.log('script end');

      // async function a1 () {
      //     console.log('a1 start')
      //     await a2()
      //     console.log('a1 end')
      // }
      // async function a2 () {
      //     console.log('a2')
      // }

      // console.log('script start')

      // setTimeout(() => {
      //     console.log('setTimeout')
      // }, 0)

      // Promise.resolve().then(() => {
      //     console.log('promise1')
      // })

      // a1()

      // let promise2 = new Promise((resolve) => {
      //     resolve('promise2.then')
      //     console.log('promise2')
      // })

      // promise2.then((res) => {
      //     console.log(res)
      //     Promise.resolve().then(() => {
      //         console.log('promise3')
      //     })
      // })
      // console.log('script end')
      // let foo = "get-element-by-id";
      // function fooA(foo) {
      //   var fooArr = foo.split("-");
      //   var newFoo = fooArr[0];
      //   for (var i = 1; i < fooArr.length; i++) {
      //     console.log(fooArr[i].charAt(0));
      //     console.log(fooArr[i].charAt(0).toUpperCase());
      //     newFoo += fooArr[i].charAt(0).toUpperCase() + fooArr[i].slice(1);
      //   }
      //   return newFoo;
      // }
      // console.log(fooA(foo));
      // console.log();
      // console.log();

      //       function getHasList(arr) {}
      // const hasList = []
      // const map = new Map()
      // return arr.forEach(item => {
      // if(map.has(item)) {
      // hasList.push(item)
      // } else {
      // map set(item, true)​
      // }
      // return hasList
      // }​

      // function unique(args) {
      // const newArr = [].concat(...args)
      // return [...new set(newArr)]
      // }

      // function isContine (arr) {
      // const temp = arr[0]
      // for (let i = 1; i<=arr.length-1;i++) {
      // if(arr[i] === temp +1 ) {
      // temp = arr[i}
      // } else {
      // return false
      // }
      // return true
      // }
      // function chunk(array, size) {
      // const start = 0
      // const len = Math.ceil(array.length / size)
      // const list = []
      // for(let i = 1; i<=len; i++) {
      // const arr = array.slice(start, size)
      // list.push(arr)
      // start = start + size
      // }
      // return list
      // }
      // function zip (arrays) {
      // const len = arrays[0].length
      // const newArray = []
      // for (let i = 0;i<len -1 ; i++) {
      // newArray [i] = []
      // for(let item of arrays) {
      // newArray[i].push(item[i])
      // }
      // return newArray
      // }

//       function getHasList(arr) {
//         const hasList = [];
//         const map = new Map();
//         arr.forEach((item) => {
//           if (map.has(item)) {
//             hasList.push(item);
//           } else {
//             map.set(item, true);
//           }
//         });
//         return [...new Set(hasList)];
//       }

//       console.log(getHasList([1, 5, 4, 3, 2, 5, 5, 1, 2]), 123);

//       function unique(...args) {
//         const newArr = [].concat(...args);
//         return [...new Set(newArr)];
//       }
//       console.log(unique([1, 2, 3], [2, 4, 5, 6], [7, 8, 9, 45]));

//       function isConst(arr) {
//         let temp = arr[0];
//         for (let i = 1; i <= arr.length - 1; i++) {
//           if (arr[i] === temp + 1) {
//             temp = arr[i];
//           } else {
//             return false;
//           }
//           return true;
//         }
//       }

//       console.log(isConst([4, 5, 6]));
//       function chunk(array, size) {
//         let start = 0;
//         const len = Math.ceil(array.length / size);
//         console.log("len: ", len);
//         const list = [];
//         for (let i = 1; i <= len; i++) {
//           const arr = array.slice(start, start + size);
//           list.push(arr);
//           start = start + size;
//         }
//         return list;
//       }

//       console.log(
//         chunk(["mick", "bcc", "abb", "职场", "傻瓜", "本地", "老天爷"], 2)
//       );
//       function zip(arrays) {
//         const len = arrays[0].length;
//         const newArray = [];
//         for (let i = 0; i <= len - 1; i++) {
//           newArray[i] = [];
//           for (let item of arrays) {
//             newArray[i].push(item[i]);
//           }
//         }
//         return newArray;
//       }

//       console.log(
//         zip([
//           ["mick", "bcc"],
//           ["abb", "职场"],
//           ["傻瓜", "本地"],
//         ])
//       );

//     console.log(true);
//     console.log(!'strange');

//     function test(a) {
//         a = a+10
//     }

//     var a = 10

//     test(a)
//     console.log(a);

//     let str1 = new RegExp('e');
// let testString = 'hello';
// let result = str1.test(testString);
// console.log(result);

// function sum(a) {
//     return function(b) {
//         if (b === undefined) {
//             return a;
//         }
//         return sum(a + b);
//     };
// }

// console.log(sum(1)(2)(3)(5)());

// function fibonacci(n) {
//   if (n <= 1) return n;
//   return fibonacci(n - 1) + fibonacci(n - 2);
// }
// console.log('fibonacci: ', fibonacci(8));

console.log('global1'); // 全局任务 1

setTimeout(() => {
  console.log('setTimeout1'); // 定时器回调 1
  Promise.resolve().then(() => {
    console.log('microtask3'); // 微任务 3（在 setTimeout1 回调内）
  });
  new Promise((resolve) => {
    console.log('promise2'); // promise2 构造函数（同步执行）
    resolve();
  }).then(() => {
    console.log('microtask4'); // 微任务 4（在 setTimeout1 回调内）
  });
}, 0); // 宏任务 1（定时器）

new Promise((resolve) => {
  console.log('promise1'); // promise1 构造函数（同步执行）
  resolve();
}).then(() => {
  console.log('microtask1'); // 微任务 1（在 promise1 之后）
  setTimeout(() => {
    console.log('setTimeout3'); // 定时器回调 3（在 microtask1 内）
  }, 0); // 宏任务 3（在 microtask1 内创建）
  new Promise((resolve) => {
    console.log('promise3'); // promise3 构造函数（同步执行，在 microtask1 内）
    resolve();
  }).then(() => {
    console.log('microtask5'); // 微任务 5（在 microtask1 内创建）
  });
}); // 微任务 1 属于 promise1 的 then 回调

console.log('global2'); // 全局任务 2

Promise.resolve().then(() => {
  console.log('microtask2'); // 微任务 2（全局微任务）
}); // 全局微任务

setTimeout(() => {
  console.log('setTimeout2'); // 定时器回调 2
  Promise.resolve().then(() => {
    console.log('microtask6'); // 微任务 6（在 setTimeout2 回调内）
  });
}, 0);

    </script>
  </body>
</html>
